#include "planete.h"



void initPlanete (Planete& planete)
{
  animInit( planete.anim, "data/anim2.ani" );
  planete.tex_planete = LoadGLTexture("data/terrain/venus.ppm", false);
 planete.tex_satellite = LoadGLTexture("data/terrain/mars.ppm", false);
}

void draw_planete (double x, double y, double z, double r, int v, unsigned int tex_planete)
{ 
  glPushMatrix();
  glEnable(GL_TEXTURE_2D);
  glBindTexture( GL_TEXTURE_2D, tex_planete );

  float t = v*temps();
  int te = ((int) (t)) % 360;

  glRotatef(te,0,1,0);
  createSphere(x,y,z,r,100,1); 

  glDisable(GL_TEXTURE_2D);
  glPopMatrix();
}

/*
   Crée une sphère centrée en (x,y,z), de rayon r, de précision n
   Les faces doivent être orientées CounterClockwise, n doit être pair
   method est pour choisir si les patchs sont quad (0) ou tri (1)
   Crée des coordonnées de texture pour une texture 2d plane
   Nécessite <math.h>
*/
void createSphere(double x, double y, double z, double r,int n,int method)
{
  int i,j;
  double t1,t2,t3;
  double e[3],p[3];
 
  if (r < 0)
    r = -r;
  if (n < 0)
    n = -n;
  if (n < 4 || r <= 0) {
    glBegin(GL_POINTS);
    glVertex3f(x,y,z);
    glEnd();
    return;
  }
 
  for (j=0;j<n/2;j++) {
    t1 = j * 2 * M_PI / n - M_PI_2;
    t2 = (j + 1) * 2 * M_PI / n - M_PI_2;
 
    if (method == 0)
      glBegin(GL_QUAD_STRIP);
    else
      glBegin(GL_TRIANGLE_STRIP);
 
    for (i=0;i<=n;i++) {
      t3 = i * 2 * M_PI / n;
 
      e[0] = cos(t1) * cos(t3);
      e[1] = sin(t1);
      e[2] = cos(t1) * sin(t3);
      p[0] = x + r * e[0];
      p[1] = y + r * e[1];
      p[2] = z + r * e[2];
      glNormal3f(e[0],e[1],e[2]);
      glTexCoord2f(1-i/(double)n,2*j/(double)n);
      glVertex3f(p[0],p[1],p[2]);
 
      e[0] = cos(t2) * cos(t3);
      e[1] = sin(t2);
      e[2] = cos(t2) * sin(t3);
      p[0] = x + r * e[0];
      p[1] = y + r * e[1];
      p[2] = z + r * e[2];
      glNormal3f(e[0],e[1],e[2]);
      glTexCoord2f(1-i/(double)n,2*(j+1)/(double)n);
      glVertex3f(p[0],p[1],p[2]);
 
    }
    glEnd();
  }
}

void draw_satelite(Animation anim, const unsigned int texture)
{
  glPushMatrix();
  float t = temps();
  int te = ((int) (t)) % anim.nbp;
  float c = t - ((int) (t) );
  int te_suivant = (te + 1) % anim.nbp;
  Vec3f pt_Pos;

  pt_Pos.x = (1 - c) * anim.P[te].x + c * anim.P[te_suivant].x;
  pt_Pos.y = (1 - c) * anim.P[te].y + c * anim.P[te_suivant].y;
  pt_Pos.z = (1 - c) * anim.P[te].z + c * anim.P[te_suivant].z;
  glTranslatef(pt_Pos.x, pt_Pos.y, pt_Pos.z);

  draw_planete(0,0,0,0.5,10,texture);
  glPopMatrix();
}
